package org;

import org.core.DownLoader;

import java.io.IOException;
import java.util.Scanner;

/**
 * @Auther: qingle
 * @Date: 2024/9/8-6:08
 * @Description: 这段代码的主要功能是从命令行输入中获取下载链接
 * 如果启动程序时未通过命令行参数提供下载链接，
 * 则程序会阻塞直到用户通过标准输入提供一个有效的下载链接
 * 为止此程序段解释了如何处理命令行输入以及
 * 如何通过用户输入获取下载链接
 *
 * eg.
 * https://dldir1.qq.com/qqfile/qq/QQNT/Windows/QQ_9.9.15_240902_x86_01.exe
 * @version: 1.0
 *
 *
 * 多线程下载器项目优化 分块下载，再进行项目的合并，分治的思想
 * ForkJoinPool 优化，加Synchronized同步代码块
 *
 */
public class Main {
    /**
     * 程序的入口方法
     * @param args 命令行参数，用于传递下载链接等信息
     */
    public static void main(String[] args) throws IOException, InterruptedException {

        // 初始化下载地址变量
        String url = null;

        // 检查命令行参数是否为空或长度为0
        if (args == null || args.length == 0) {
            // 如果没有提供命令行参数则从用户输入获取下载链接
            for (;;) {
                // 提示用户输入下载链接
                System.out.println("请输入下载链接");
                // 使用标准输入创建Scanner实例读取用户输入
                Scanner scanner = new Scanner(System.in);
                // 读取用户输入的下载链接
                url = scanner.nextLine();
                // 如果用户输入非空且不为空字符串则退出循环
                if (url != null && !url.isEmpty()) {
                    break;
                }
            }
        } else {
            // 如果命令行参数中包含下载链接则直接使用该链接
            url = args[0];
        }

//	    System.out.println(url);

        DownLoader downLoader = new DownLoader();
        downLoader.download(url);
    }
}
